package com.zero.demo.jms.service;


import com.zero.demo.jms.util.PageResult;

import java.io.Serializable;
import java.util.List;

/**
 * @author zengzr
 * @desc
 * @Date 2019/4/14 12:20
 */
public interface BaseService<T, E, ID extends Serializable> {

    /**
     * 根据条件查询记录数量
     *
     * @param example
     * @return
     */
    int countByExample(E example) throws Exception;

    /**
     * 根据条件删除记录
     *
     * @param example
     * @return
     */
    int deleteByExample(E example) throws Exception;

    /**
     * 根据主键删除记录
     *
     * @param id
     * @return
     */
    int deleteByPrimaryKey(ID id) throws Exception;

    /**
     * 插入记录
     *
     * @param record
     * @return
     */
    int insert(T record) throws Exception;

    /**
     * 插入记录有效字段
     *
     * @param record
     * @return
     */
    int insertSelective(T record) throws Exception;

    /**
     * 根据条件查询记录，附带BLOB字段
     *
     * @param example
     * @return
     */
    List<T> selectByExampleWithBLOBs(E example) throws Exception;

    /**
     * 根据条件查询记录
     *
     * @param example
     * @return
     */
    List<T> selectByExample(E example) throws Exception;

    /**
     * 根据条件查询记录并按页码分页，附带BLOB字段
     *
     * @param example  条件
     * @param pageNum  页数
     * @param pageSize 每页记录数
     * @return
     */
    List<T> selectByExampleWithBLOBsForStartPage(E example, ID pageNum, ID pageSize) throws Exception;

    /**
     *
     * @param example
     * @param
     * @return
     * @throws Exception
     */
    PageResult<List<T>> selectByExamplePage(E example, int pageNum, int pageSize) throws Exception;


    /**
     * 根据主键查询记录
     *
     * @param id
     * @return
     */
    T selectByPrimaryKey(ID id) throws Exception;

    /**
     * 根据条件更新有效字段
     *
     * @param record
     * @param example
     * @return
     */
    int updateByExampleSelective(T record, E example) throws Exception;

    /**
     * 根据条件更新记录有效字段，附带BLOB字段
     *
     * @param record
     * @param example
     * @return
     */
    int updateByExampleWithBLOBs(T record, E example) throws Exception;

    /**
     * 根据条件更新记录
     *
     * @param record
     * @param example
     * @return
     */
    int updateByExample(T record, E example) throws Exception;

    /**
     * 根据主键更新记录有效字段
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(T record) throws Exception;

    /**
     * 根据主键更新记录，附带BLOB字段
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeyWithBLOBs(T record) throws Exception;

    /**
     * 根据主键更新记录
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(T record) throws Exception;

}
